#ifndef __BTL_ALG_TYPE_H
#define __BTL_ALG_TYPE_H

/*
安全等级
*/
typedef enum bl_far_e {
    BL_FAR_1       = 0,
    BL_FAR_2       = 1,
    BL_FAR_5       = 2,
    BL_FAR_10      = 3,
    BL_FAR_20      = 4,
    BL_FAR_50      = 5,
    BL_FAR_100     = 6,
    BL_FAR_200     = 7,
    BL_FAR_500     = 8,
    BL_FAR_1000    = 9,
    BL_FAR_2K      = 10,
    BL_FAR_5000    = 11,
    BL_FAR_10000   = 12,
    BL_FAR_20K     = 13,
    BL_FAR_50000   = 14,
    BL_FAR_100000  = 15,
    BL_FAR_200K    = 16,
    BL_FAR_500000  = 17,
    BL_FAR_1000000 = 18,
    BL_FAR_2M      = 19,
    BL_FAR_5M      = 20,
    BL_FAR_10M     = 21,
    BL_FAR_20M     = 22,
    BL_FAR_50M     = 23,
    BL_FAR_100M    = 24,
    BL_FAR_200M    = 25,
    BL_FAR_500M    = 26,
    BL_FAR_1000M   = 27,
    BL_FAR_Inf     = 28
} bl_far_t;

/*
模板结构体
定义此结构体是要初始化，如 BL_TEMPLATE a={0};
此结构体的大小影响比对时对heap的开销
*/
typedef struct BL_TEMPLATE_tag {
    unsigned char* pTemplateData;        // 模板数据
    unsigned short templateSize;         // 模板数据size
    unsigned char templateType;          // 模板类型
    unsigned char is_memory_reference;   // 是否内存相关，仅供SDK内部使用，如果是0x5A,则pTemplateData不可free
    unsigned short template_id;          // 仅供SDK内部使用
    unsigned char addr_index;            // 仅供SDK内部使用
} BL_TEMPLATE, *PBL_TEMPLATE;

/*
支持不同模板使用不同的安全等级
*/
typedef struct BL_TEMPLATE_EX_tag {
    int nFarAccepted;         
    PBL_TEMPLATE pBlTemplate; 
} BL_TEMPLATE_EX, *PBL_TEMPLATE_EX;

typedef struct BL_EMBEDDED_ENROLL_SCREEN_SETTINGS_tag {
    PBL_TEMPLATE* pblMultiTemplates;
    unsigned char nNbrOfMultiTemplates;
    unsigned char max_verify_count_one_time; //一次可比对的最大模板数量，默认为0，表示没有限制
} BL_EMBEDDED_ENROLL_SCREEN_SETTINGS_t;

#endif
